package com.db;

import com.bean.Admin;
import com.bean.PaginationSupport;
import com.bean.Post;
import com.bean.User;

import java.util.List;

public interface PostRepository {

    /**
     * 发帖
     * @param post
     * @return
     */
    Post save(Post post) ;

    /**
     * 统计置顶帖数量
     * @return
     */
    long countTop() ;

    /**
     * 统计所有帖子数量
     */
    long countPost();

    /**
     * 统计含keyword关键词的帖子数量
     * @return
     */
    long countKeyword(String keyword);

    /**
     * 统计poster发布主题帖的数量
     * @return
     */
    long countMyPost(User poster);

    /**
     * 依据页码和指定页面大小，返回所有帖子的列表
     * @param pageNo    起始位置
     * @param pageSize  每页数量
     * @return 分页是对象
     */
    PaginationSupport<Post> findAllPostPage(int pageNo, int pageSize);

    /**
     * 依据页码和指定页面大小，返回poster发布的主题帖的列表
     * @param poster
     * @param pageNo
     * @param pageSize
     * @return
     */
    PaginationSupport<Post> findMyPostPage(User poster, int pageNo, int pageSize);

    /**
     * 对未置顶的post进行置顶
     * @param post
     * @return
     */
    Post setTop(Post post);

    /**
     * 依据页码和指定页面大小，返回主题内包含keyword的帖子
     * @param keyword
     * @param pageNo
     * @param pageSize
     * @return
     */
    PaginationSupport<Post> findByKeyWord(String keyword,int pageNo, int pageSize);

    /**
     * 根据postID查找帖子
     * @param postID
     * @return
     */
    Post findOne(int postID);

    /**
     * admin修改指定post
     * @param post
     * @param admin
     * @param newTopic
     * @param newContent
     * @return
     */
    Post adminModifyPost(Post post, Admin admin, String newTopic, String newContent);

    /**
     * 修改自己的主题帖
     * @param post
     * @param poster
     * @param newTopic
     * @param newContent
     * @return
     */
    Post modifyMyPost(Post post, User poster, String newTopic, String newContent);

    /**
     * 删除post
     * @param post
     */
    void deletePost(Post post);

    /**
     * 点击帖子，点击量+1
     * @param post
     */
    void clickPost(Post post);


}
